﻿/*
 Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */
        CKEDITOR.dialog.add("link", function(n) {
            var p, q;
            function r(a) {
                return a.replace(/'/g, "\\$&")
            }
            function t(a) {
                var g, c = p, d, e;
                g = [q, "("];
                for (var b = 0; b < c.length; b++)
                    d = c[b].toLowerCase(), e = a[d], 0 < b && g.push(","), g.push("'", e ? r(encodeURIComponent(a[d])) : "", "'");
                g.push(")");
                return g.join("")
            }
            function u(a) {
                for (var g, c = a.length, d = [], e = 0; e < c; e++)
                    g = a.charCodeAt(e), d.push(g);
                return"String.fromCharCode(" + d.join(",") + ")"
            }
            function v(a) {
                return(a = a.getAttribute("class")) ? a.replace(/\s*(?:cke_anchor_empty|cke_anchor)(?:\s*$)?/g,
                        "") : ""
            }
            var w = CKEDITOR.plugins.link, s = function() {
                var a = this.getDialog(), g = a.getContentElement("target", "popupFeatures"), a = a.getContentElement("target", "linkTargetName"), c = this.getValue();
                if (g && a)
                    switch (g = g.getElement(), g.hide(), a.setValue(""), c) {
                        case "frame":
                            a.setLabel(n.lang.link.targetFrameName);
                            a.getElement().show();
                            break;
                        case "popup":
                            g.show();
                            a.setLabel(n.lang.link.targetPopupName);
                            a.getElement().show();
                            break;
                        default:
                            a.setValue(c), a.getElement().hide()
                    }
            }, x = /^javascript:/, y = /^mailto:([^?]+)(?:\?(.+))?$/,
                    z = /subject=([^;?:@&=$,\/]*)/, A = /body=([^;?:@&=$,\/]*)/, B = /^#(.*)$/, C = /^((?:http|https|ftp|news):\/\/)?(.*)$/, D = /^(_(?:self|top|parent|blank))$/, E = /^javascript:void\(location\.href='mailto:'\+String\.fromCharCode\(([^)]+)\)(?:\+'(.*)')?\)$/, F = /^javascript:([^(]+)\(([^)]+)\)$/, G = /\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*/, H = /(?:^|,)([^=]+)=(\d+|yes|no)/gi, I = function(a, g) {
                        var c = g && (g.data("cke-saved-href") || g.getAttribute("href")) || "", d, e, b =
                                {};
                        c.match(x) && ("encode" == o ? c = c.replace(E, function(a, c, b) {
                            return"mailto:" + String.fromCharCode.apply(String, c.split(",")) + (b && b.replace(/\\'/g, "'"))
                        }) : o && c.replace(F, function(a, c, d) {
                            if (c == q) {
                                b.type = "email";
                                for (var a = b.email = {}, c = /(^')|('$)/g, d = d.match(/[^,\s]+/g), e = d.length, g, f, h = 0; h < e; h++)
                                    g = decodeURIComponent, f = d[h].replace(c, "").replace(/\\'/g, "'"), f = g(f), g = p[h].toLowerCase(), a[g] = f;
                                a.address = [a.name, a.domain].join("@")
                            }
                        }));
                        if (!b.type)
                            if (d = c.match(B))
                                b.type = "anchor", b.anchor = {}, b.anchor.name = b.anchor.id =
                                        d[1];
                            else if (d = c.match(y)) {
                                e = c.match(z);
                                c = c.match(A);
                                b.type = "email";
                                var f = b.email = {};
                                f.address = d[1];
                                e && (f.subject = decodeURIComponent(e[1]));
                                c && (f.body = decodeURIComponent(c[1]))
                            } else
                                c && (e = c.match(C)) ? (b.type = "url", b.url = {}, b.url.protocol = e[1], b.url.url = e[2]) : b.type = "url";
                        if (g) {
                            d = g.getAttribute("target");
                            b.target = {};
                            b.adv = {};
                            if (d)
                                d.match(D) ? b.target.type = b.target.name = d : (b.target.type = "frame", b.target.name = d);
                            else if (d = (d = g.data("cke-pa-onclick") || g.getAttribute("onclick")) && d.match(G)) {
                                b.target.type =
                                        "popup";
                                for (b.target.name = d[1]; c = H.exec(d[2]); )
                                    ("yes" == c[2] || "1" == c[2]) && !(c[1]in{height: 1, width: 1, top: 1, left: 1}) ? b.target[c[1]] = !0 : isFinite(c[2]) && (b.target[c[1]] = c[2])
                            }
                            d = function(a, c) {
                                var d = g.getAttribute(c);
                                null !== d && (b.adv[a] = d || "")
                            };
                            d("advId", "id");
                            d("advLangDir", "dir");
                            d("advAccessKey", "accessKey");
                            b.adv.advName = g.data("cke-saved-name") || g.getAttribute("name") || "";
                            d("advLangCode", "lang");
                            d("advTabIndex", "tabindex");
                            d("advTitle", "title");
                            d("advContentType", "type");
                            CKEDITOR.plugins.link.synAnchorSelector ?
                                    b.adv.advCSSClasses = v(g) : d("advCSSClasses", "class");
                            d("advCharset", "charset");
                            d("advStyles", "style");
                            d("advRel", "rel")
                        }
                        d = b.anchors = [];
                        var h;
                        if (CKEDITOR.plugins.link.emptyAnchorFix) {
                            f = a.document.getElementsByTag("a");
                            c = 0;
                            for (e = f.count(); c < e; c++)
                                if (h = f.getItem(c), h.data("cke-saved-name") || h.hasAttribute("name"))
                                    d.push({name: h.data("cke-saved-name") || h.getAttribute("name"), id: h.getAttribute("id")})
                        } else {
                            f = new CKEDITOR.dom.nodeList(a.document.$.anchors);
                            c = 0;
                            for (e = f.count(); c < e; c++)
                                h = f.getItem(c), d[c] =
                                        {name: h.getAttribute("name"), id: h.getAttribute("id")}
                        }
                        if (CKEDITOR.plugins.link.fakeAnchor) {
                            f = a.document.getElementsByTag("img");
                            c = 0;
                            for (e = f.count(); c < e; c++)
                                (h = CKEDITOR.plugins.link.tryRestoreFakeAnchor(a, f.getItem(c))) && d.push({name: h.getAttribute("name"), id: h.getAttribute("id")})
                        }
                        this._.selectedElement = g;
                        return b
                    }, j = function(a) {
                a.target && this.setValue(a.target[this.id] || "")
            }, k = function(a) {
                a.adv && this.setValue(a.adv[this.id] || "")
            }, l = function(a) {
                a.target || (a.target = {});
                a.target[this.id] = this.getValue() ||
                        ""
            }, m = function(a) {
                a.adv || (a.adv = {});
                a.adv[this.id] = this.getValue() || ""
            }, o = n.config.emailProtection || "";
            o && "encode" != o && (q = p = void 0, o.replace(/^([^(]+)\(([^)]+)\)$/, function(a, b, c) {
                q = b;
                p = [];
                c.replace(/[^,\s]+/g, function(a) {
                    p.push(a)
                })
            }));
            var i = n.lang.common, b = n.lang.link;
            return{title: b.title, minWidth: 350, minHeight: 230, contents: [{id: "info", label: b.info, title: b.info, elements: [{id: "linkType", type: "select", label: b.type, "default": "url", items: [[b.toUrl, "url"], [b.toAnchor, "anchor"], [b.toEmail, "email"]], onChange: function() {
                                    var a =
                                            this.getDialog(), b = ["urlOptions", "anchorOptions", "emailOptions"], c = this.getValue(), d = a.definition.getContents("upload"), d = d && d.hidden;
                                    if (c == "url") {
                                        n.config.linkShowTargetTab && a.showPage("target");
                                        d || a.showPage("upload")
                                    } else {
                                        a.hidePage("target");
                                        d || a.hidePage("upload")
                                    }
                                    for (d = 0; d < b.length; d++) {
                                        var e = a.getContentElement("info", b[d]);
                                        if (e) {
                                            e = e.getElement().getParent().getParent();
                                            b[d] == c + "Options" ? e.show() : e.hide()
                                        }
                                    }
                                    a.layout()
                                }, setup: function(a) {
                                    a.type && this.setValue(a.type)
                                }, commit: function(a) {
                                    a.type =
                                            this.getValue()
                                }}, {type: "vbox", id: "urlOptions", children: [{type: "hbox", widths: ["25%", "75%"], children: [{id: "protocol", type: "select", label: i.protocol, "default": "http://", items: [["http://‎", "http://"], ["https://‎", "https://"], ["ftp://‎", "ftp://"], ["news://‎", "news://"], [b.other, ""]], setup: function(a) {
                                                    a.url && this.setValue(a.url.protocol || "")
                                                }, commit: function(a) {
                                                    if (!a.url)
                                                        a.url = {};
                                                    a.url.protocol = this.getValue()
                                                }}, {type: "text", id: "url", label: i.url, required: !0, onLoad: function() {
                                                    this.allowOnChange = true
                                                }, onKeyUp: function() {
                                                    this.allowOnChange =
                                                            false;
                                                    var a = this.getDialog().getContentElement("info", "protocol"), b = this.getValue(), c = /^((javascript:)|[#\/\.\?])/i, d = /^(http|https|ftp|news):\/\/(?=.)/i.exec(b);
                                                    if (d) {
                                                        this.setValue(b.substr(d[0].length));
                                                        a.setValue(d[0].toLowerCase())
                                                    } else
                                                        c.test(b) && a.setValue("");
                                                    this.allowOnChange = true
                                                }, onChange: function() {
                                                    if (this.allowOnChange)
                                                        this.onKeyUp()
                                                }, validate: function() {
                                                    var a = this.getDialog();
                                                    if (a.getContentElement("info", "linkType") && a.getValueOf("info", "linkType") != "url")
                                                        return true;
                                                    if (/javascript\:/.test(this.getValue())) {
                                                        alert(i.invalidValue);
                                                        return false
                                                    }
                                                    return this.getDialog().fakeObj ? true : CKEDITOR.dialog.validate.notEmpty(b.noUrl).apply(this)
                                                }, setup: function(a) {
                                                    this.allowOnChange = false;
                                                    a.url && this.setValue(a.url.url);
                                                    this.allowOnChange = true
                                                }, commit: function(a) {
                                                    this.onChange();
                                                    if (!a.url)
                                                        a.url = {};
                                                    a.url.url = this.getValue();
                                                    this.allowOnChange = false
                                                }}], setup: function() {
                                            this.getDialog().getContentElement("info", "linkType") || this.getElement().show()
                                        }}, {type: "button", id: "browse", hidden: "true", filebrowser: "info:url", label: i.browseServer}]},
                            {type: "vbox", id: "anchorOptions", width: 260, align: "center", padding: 0, children: [{type: "fieldset", id: "selectAnchorText", label: b.selectAnchor, setup: function(a) {
                                            a.anchors.length > 0 ? this.getElement().show() : this.getElement().hide()
                                        }, children: [{type: "hbox", id: "selectAnchor", children: [{type: "select", id: "anchorName", "default": "", label: b.anchorName, style: "width: 100%;", items: [[""]], setup: function(a) {
                                                            this.clear();
                                                            this.add("");
                                                            for (var b = 0; b < a.anchors.length; b++)
                                                                a.anchors[b].name && this.add(a.anchors[b].name);
                                                            a.anchor &&
                                                                    this.setValue(a.anchor.name);
                                                            (a = this.getDialog().getContentElement("info", "linkType")) && a.getValue() == "email" && this.focus()
                                                        }, commit: function(a) {
                                                            if (!a.anchor)
                                                                a.anchor = {};
                                                            a.anchor.name = this.getValue()
                                                        }}, {type: "select", id: "anchorId", "default": "", label: b.anchorId, style: "width: 100%;", items: [[""]], setup: function(a) {
                                                            this.clear();
                                                            this.add("");
                                                            for (var b = 0; b < a.anchors.length; b++)
                                                                a.anchors[b].id && this.add(a.anchors[b].id);
                                                            a.anchor && this.setValue(a.anchor.id)
                                                        }, commit: function(a) {
                                                            if (!a.anchor)
                                                                a.anchor = {};
                                                            a.anchor.id =
                                                                    this.getValue()
                                                        }}], setup: function(a) {
                                                    a.anchors.length > 0 ? this.getElement().show() : this.getElement().hide()
                                                }}]}, {type: "html", id: "noAnchors", style: "text-align: center;", html: '<div role="note" tabIndex="-1">' + CKEDITOR.tools.htmlEncode(b.noAnchors) + "</div>", focus: !0, setup: function(a) {
                                            a.anchors.length < 1 ? this.getElement().show() : this.getElement().hide()
                                        }}], setup: function() {
                                    this.getDialog().getContentElement("info", "linkType") || this.getElement().hide()
                                }}, {type: "vbox", id: "emailOptions", padding: 1, children: [{type: "text",
                                        id: "emailAddress", label: b.emailAddress, required: !0, validate: function() {
                                            var a = this.getDialog();
                                            return!a.getContentElement("info", "linkType") || a.getValueOf("info", "linkType") != "email" ? true : CKEDITOR.dialog.validate.notEmpty(b.noEmail).apply(this)
                                        }, setup: function(a) {
                                            a.email && this.setValue(a.email.address);
                                            (a = this.getDialog().getContentElement("info", "linkType")) && a.getValue() == "email" && this.select()
                                        }, commit: function(a) {
                                            if (!a.email)
                                                a.email = {};
                                            a.email.address = this.getValue()
                                        }}, {type: "text", id: "emailSubject",
                                        label: b.emailSubject, setup: function(a) {
                                            a.email && this.setValue(a.email.subject)
                                        }, commit: function(a) {
                                            if (!a.email)
                                                a.email = {};
                                            a.email.subject = this.getValue()
                                        }}, {type: "textarea", id: "emailBody", label: b.emailBody, rows: 3, "default": "", setup: function(a) {
                                            a.email && this.setValue(a.email.body)
                                        }, commit: function(a) {
                                            if (!a.email)
                                                a.email = {};
                                            a.email.body = this.getValue()
                                        }}], setup: function() {
                                    this.getDialog().getContentElement("info", "linkType") || this.getElement().hide()
                                }}]}, {id: "target", label: b.target, title: b.target, elements: [{type: "hbox",
                                widths: ["50%", "50%"], children: [{type: "select", id: "linkTargetType", label: i.target, "default": "notSet", style: "width : 100%;", items: [[i.notSet, "notSet"], [b.targetFrame, "frame"], [b.targetPopup, "popup"], [i.targetNew, "_blank"], [i.targetTop, "_top"], [i.targetSelf, "_self"], [i.targetParent, "_parent"]], onChange: s, setup: function(a) {
                                            a.target && this.setValue(a.target.type || "notSet");
                                            s.call(this)
                                        }, commit: function(a) {
                                            if (!a.target)
                                                a.target = {};
                                            a.target.type = this.getValue()
                                        }}, {type: "text", id: "linkTargetName", label: b.targetFrameName,
                                        "default": "", setup: function(a) {
                                            a.target && this.setValue(a.target.name)
                                        }, commit: function(a) {
                                            if (!a.target)
                                                a.target = {};
                                            a.target.name = this.getValue().replace(/\W/gi, "")
                                        }}]}, {type: "vbox", width: "100%", align: "center", padding: 2, id: "popupFeatures", children: [{type: "fieldset", label: b.popupFeatures, children: [{type: "hbox", children: [{type: "checkbox", id: "resizable", label: b.popupResizable, setup: j, commit: l}, {type: "checkbox", id: "status", label: b.popupStatusBar, setup: j, commit: l}]}, {type: "hbox", children: [{type: "checkbox",
                                                        id: "location", label: b.popupLocationBar, setup: j, commit: l}, {type: "checkbox", id: "toolbar", label: b.popupToolbar, setup: j, commit: l}]}, {type: "hbox", children: [{type: "checkbox", id: "menubar", label: b.popupMenuBar, setup: j, commit: l}, {type: "checkbox", id: "fullscreen", label: b.popupFullScreen, setup: j, commit: l}]}, {type: "hbox", children: [{type: "checkbox", id: "scrollbars", label: b.popupScrollBars, setup: j, commit: l}, {type: "checkbox", id: "dependent", label: b.popupDependent, setup: j, commit: l}]}, {type: "hbox", children: [{type: "text",
                                                        widths: ["50%", "50%"], labelLayout: "horizontal", label: i.width, id: "width", setup: j, commit: l}, {type: "text", labelLayout: "horizontal", widths: ["50%", "50%"], label: b.popupLeft, id: "left", setup: j, commit: l}]}, {type: "hbox", children: [{type: "text", labelLayout: "horizontal", widths: ["50%", "50%"], label: i.height, id: "height", setup: j, commit: l}, {type: "text", labelLayout: "horizontal", label: b.popupTop, widths: ["50%", "50%"], id: "top", setup: j, commit: l}]}]}]}]}, {id: "upload", label: b.upload, title: b.upload, hidden: !0, filebrowser: "uploadButton",
                        elements: [{type: "file", id: "upload", label: i.upload, style: "height:40px", size: 29}, {type: "fileButton", id: "uploadButton", label: i.uploadSubmit, filebrowser: "info:url", "for": ["upload", "upload"]}]}, {id: "advanced", label: b.advanced, title: b.advanced, elements: [{type: "vbox", padding: 1, children: [{type: "hbox", widths: ["45%", "35%", "20%"], children: [{type: "text", id: "advId", label: b.id, setup: k, commit: m}, {type: "select", id: "advLangDir", label: b.langDir, "default": "", style: "width:110px", items: [[i.notSet, ""], [b.langDirLTR, "ltr"],
                                                    [b.langDirRTL, "rtl"]], setup: k, commit: m}, {type: "text", id: "advAccessKey", width: "80px", label: b.acccessKey, maxLength: 1, setup: k, commit: m}]}, {type: "hbox", widths: ["45%", "35%", "20%"], children: [{type: "text", label: b.name, id: "advName", setup: k, commit: m}, {type: "text", label: b.langCode, id: "advLangCode", width: "110px", "default": "", setup: k, commit: m}, {type: "text", label: b.tabIndex, id: "advTabIndex", width: "80px", maxLength: 5, setup: k, commit: m}]}]}, {type: "vbox", padding: 1, children: [{type: "hbox", widths: ["45%", "55%"], children: [{type: "text",
                                                label: b.advisoryTitle, "default": "", id: "advTitle", setup: k, commit: m}, {type: "text", label: b.advisoryContentType, "default": "", id: "advContentType", setup: k, commit: m}]}, {type: "hbox", widths: ["45%", "55%"], children: [{type: "text", label: b.cssClasses, "default": "", id: "advCSSClasses", setup: k, commit: m}, {type: "text", label: b.charset, "default": "", id: "advCharset", setup: k, commit: m}]}, {type: "hbox", widths: ["45%", "55%"], children: [{type: "text", label: b.rel, "default": "", id: "advRel", setup: k, commit: m}, {type: "text", label: b.styles,
                                                "default": "", id: "advStyles", validate: CKEDITOR.dialog.validate.inlineStyle(n.lang.common.invalidInlineStyle), setup: k, commit: m}]}]}]}], onShow: function() {
                    var a = this.getParentEditor(), b = a.getSelection(), c = null;
                    (c = w.getSelectedLink(a)) && c.hasAttribute("href") ? b.selectElement(c) : c = null;
                    this.setupContent(I.apply(this, [a, c]))
                }, onOk: function() {
                    var a = {}, b = [], c = {}, d = this.getParentEditor();
                    this.commitContent(c);
                    switch (c.type || "url") {
                        case "url":
                            var e = c.url && c.url.protocol != void 0 ? c.url.protocol : "http://", i = c.url &&
                                    CKEDITOR.tools.trim(c.url.url) || "";
                            a["data-cke-saved-href"] = i.indexOf("/") === 0 ? i : e + i;
                            break;
                        case "anchor":
                            e = c.anchor && c.anchor.id;
                            a["data-cke-saved-href"] = "#" + (c.anchor && c.anchor.name || e || "");
                            break;
                        case "email":
                            var f = c.email, e = f.address;
                            switch (o) {
                                case "":
                                case "encode":
                                    var i = encodeURIComponent(f.subject || ""), h = encodeURIComponent(f.body || ""), f = [];
                                    i && f.push("subject=" + i);
                                    h && f.push("body=" + h);
                                    f = f.length ? "?" + f.join("&") : "";
                                    if (o == "encode") {
                                        e = ["javascript:void(location.href='mailto:'+", u(e)];
                                        f && e.push("+'",
                                                r(f), "'");
                                        e.push(")")
                                    } else
                                        e = ["mailto:", e, f];
                                    break;
                                default:
                                    e = e.split("@", 2);
                                    f.name = e[0];
                                    f.domain = e[1];
                                    e = ["javascript:", t(f)]
                            }
                            a["data-cke-saved-href"] = e.join("")
                    }
                    if (c.target)
                        if (c.target.type == "popup") {
                            for (var e = ["window.open(this.href, '", c.target.name || "", "', '"], j = ["resizable", "status", "location", "toolbar", "menubar", "fullscreen", "scrollbars", "dependent"], i = j.length, f = function(a) {
                                c.target[a] && j.push(a + "=" + c.target[a])
                            }, h = 0; h < i; h++)
                                j[h] = j[h] + (c.target[j[h]] ? "=yes" : "=no");
                            f("width");
                            f("left");
                            f("height");
                            f("top");
                            e.push(j.join(","), "'); return false;");
                            a["data-cke-pa-onclick"] = e.join("");
                            b.push("target")
                        } else {
                            c.target.type != "notSet" && c.target.name ? a.target = c.target.name : b.push("target");
                            b.push("data-cke-pa-onclick", "onclick")
                        }
                    if (c.adv) {
                        e = function(d, e) {
                            var f = c.adv[d];
                            f ? a[e] = f : b.push(e)
                        };
                        e("advId", "id");
                        e("advLangDir", "dir");
                        e("advAccessKey", "accessKey");
                        c.adv.advName ? a.name = a["data-cke-saved-name"] = c.adv.advName : b = b.concat(["data-cke-saved-name", "name"]);
                        e("advLangCode", "lang");
                        e("advTabIndex", "tabindex");
                        e("advTitle", "title");
                        e("advContentType", "type");
                        e("advCSSClasses", "class");
                        e("advCharset", "charset");
                        e("advStyles", "style");
                        e("advRel", "rel")
                    }
                    e = d.getSelection();
                    a.href = a["data-cke-saved-href"];
                    if (this._.selectedElement) {
                        d = this._.selectedElement;
                        i = d.data("cke-saved-href");
                        f = d.getHtml();
                        d.setAttributes(a);
                        d.removeAttributes(b);
                        c.adv && (c.adv.advName && CKEDITOR.plugins.link.synAnchorSelector) && d.addClass(d.getChildCount() ? "cke_anchor" : "cke_anchor_empty");
                        if (i == f || c.type == "email" && f.indexOf("@") != -1)
                            d.setHtml(c.type ==
                                    "email" ? c.email.address : a["data-cke-saved-href"]);
                        e.selectElement(d);
                        delete this._.selectedElement
                    } else {
                        e = e.getRanges(1)[0];
                        if (e.collapsed) {
                            d = new CKEDITOR.dom.text(c.type == "email" ? c.email.address : a["data-cke-saved-href"], d.document);
                            e.insertNode(d);
                            e.selectNodeContents(d)
                        }
                        d = new CKEDITOR.style({element: "a", attributes: a});
                        d.type = CKEDITOR.STYLE_INLINE;
                        d.applyToRange(e);
                        e.select()
                    }
                }, onLoad: function() {
                    n.config.linkShowAdvancedTab || this.hidePage("advanced");
                    n.config.linkShowTargetTab || this.hidePage("target")
                },
                onFocus: function() {
                    var a = this.getContentElement("info", "linkType");
                    if (a && a.getValue() == "url") {
                        a = this.getContentElement("info", "url");
                        a.select()
                    }
                }}
        });